A container or containerized application is an instance of a user-space running an application within an operating system (OS) of a host device (e.g., a server) or a virtual machine being executed by the host device. Containers enable OS-level virtualization in which the OS kernel allows the existence of multiple isolated containers. A container may provide an executable environment with a complete filesystem. The filesystem may contain code, runtime, system tools, system libraries, and so on. That is, execution of a container can be the same regardless of the underlying infrastructure. A “Docker” is one of the popular existing platforms for creating, migrating, managing, and deploying containers.
A container, unlike a virtual machine, does not require or include a separate OS. Rather, the container relies on the kernel's functionality and uses hardware resources (e.g., central processing unit (CPU), memory, I/O, network, and the like) and separate namespaces to isolate the application's view of the OS. When containers are configured for deployment, a ‘request’ containing minimum requirement for each resource (e.g., CPU, memory, and the like) may be provided to a container orchestrator. The container orchestrator may reserve this minimum capacity and takes care of placing these containers on different nodes (e.g., servers or virtual machines) based on their resource requirement and availability.
The drawings described herein are for illustration purposes only and are not intended to limit the scope of the present subject matter in any way.